package com.dabai.iot.core.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dabai.common.tenant.core.TenantEntity;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 物模型属性表 实体类
 *
 * @author kev1n
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("iot_thing_model_item")
public class ThingModelItemEntity extends TenantEntity {

    /**
     * 主键id
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 产品id
     */
    @Schema(description = "产品id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long productId;

    /**
     * 产品Key
     */
    @Schema(description = "产品Key")
    private String productKey;

    /**
     * 物模型模块主键id
     */
    @Schema(description = "物模型模块主键id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long blockId;

    /**
     * 物模型模块标识符
     */
    @Schema(description = "物模型模块标识符")
    private String blockIdentifier;

    /**
     * 中文名称
     */
    @Schema(description = "属性中文名称")
    private String name;

    /**
     * 属性标识符
     */
    @Schema(description = "属性标识符")
    private String identifier;

    /**
     * 功能类型
     *
     * @see com.dabai.iot.common.enums.FunctionType
     */
    @Schema(description = "功能类型")
    private String functionType;

    /**
     * 数据类型
     *
     * @see com.dabai.iot.common.enums.DataType
     */
    @Schema(description = "数据类型")
    private String dataType;

    /**
     * 参数最小值，仅 number 类型生效
     */
    @Schema(description = "参数最小值，仅 number 类型生效")
    private String min;

    /**
     * 参数最大值，仅 number 类型生效
     */
    @Schema(description = "参数最大值，仅 number 类型生效")
    private String max;

    /**
     * 字符串长度，仅 text 类型生效
     */
    @Schema(description = "字符串长度，仅 text 类型生效")
    private Integer textLength;

    /**
     * 精度
     */
    @Schema(description = "精度")
    private Integer scale;

    /**
     * 单位描述
     */
    @Schema(description = "单位描述")
    private String unit;

    /**
     * 布尔值 ture 的描述
     */
    @Schema(description = "布尔值 ture 的描述")
    private String trueDesc;

    /**
     * 布尔值 false 的描述
     */
    @Schema(description = "布尔值 false 的描述")
    private String falseDesc;

    /**
     * 访问模式
     */
    @Schema(description = "访问模式")
    private String method;

    /**
     * 排序
     */
    @Schema(description = "排序")
    private Integer sort;

    /**
     * 删除标志（0代表存在 1代表删除）
     */
    @TableLogic
    private String delFlag;

}
